package com.spzx.payment.service.impl;

import com.alibaba.fastjson2.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.spzx.common.core.exception.ServiceException;
import com.spzx.payment.configure.AlipayConfig;
import com.spzx.payment.domain.PaymentInfo;
import com.spzx.payment.service.IAlipayService;
import com.spzx.payment.service.IPaymentInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;

@Service
public class AlipayServiceImpl implements IAlipayService {

    @Autowired
    AlipayClient alipayClient;

    @Autowired
    IPaymentInfoService paymentInfoService;


    @Override
    public String submitAlipay(String orderNo) {

        //保存支付记录
        PaymentInfo paymentInfo = paymentInfoService.savePaymentInfo(orderNo);


        // 构建支付请求对象
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();

        // 设置同步回调地址
        // http://ry-spzx.atguigu.cn/#/pages/money/paySuccess   提示用户支付成功
        request.setReturnUrl(AlipayConfig.return_payment_url);

        // 设置异步回调地址
        http://localhost:8080/payment/alipay/callback/notify   购买域名。通过内网穿透工具，生成隧道。将域名和本地服务器进行映射。
        request.setNotifyUrl(AlipayConfig.notify_payment_url);

        // 声明一个map 集合，给支付支付接口传递数据。
        HashMap<String, Object> map = new HashMap<>();
        map.put("out_trade_no",paymentInfo.getOrderNo());
        map.put("product_code","QUICK_WAP_WAY"); //销售产品码，商家和支付宝签约的产品码。手机网站支付为：QUICK_WAP_WAY
        //map.put("total_amount",orderInfo.getTotalAmount());
        // 注意 注意 注意 注意 注意 注意 注意 注意 注意 注意 注意 注意 注意 注意 注意
        map.put("total_amount","0.01"); //    只付 1分钱     测试
        map.put("subject",paymentInfo.getContent());

        // 设置订单绝对超时时间      订单最晚支付时间，这个时间到了，支付宝会阻止用户付款。
        //model.setTimeExpire("2016-12-31 10:05:00");

        request.setBizContent(JSON.toJSONString(map));

        try {
            AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST");
            return response.getBody(); // 获取支付宝返回 h5 form 表单页面。
        } catch (Exception e) {
            throw new ServiceException(e.getMessage());
        }

    }
}
